package com.mango.leet.code.week1.game285;

/**
 * 6027. 统计数组中峰和谷的数量
 */
/**
 * 给你一个下标从 0 开始的整数数组 nums 。如果两侧距 i 最近的不相等邻居的值均小于 nums[i] ，则下标 i 是 nums 中，某个峰的一部分。类似地，如果两侧距 i 最近的不相等邻居的值均大于 nums[i] ，则下标 i 是 nums 中某个谷的一部分。对于相邻下标 i 和 j ，如果 nums[i] == nums[j] ， 则认为这两下标属于 同一个 峰或谷。
 *
 * 注意，要使某个下标所做峰或谷的一部分，那么它左右两侧必须 都 存在不相等邻居。
 *
 * 返回 nums 中峰和谷的数量。
 *
 *
 *
 * 示例 1：
 *
 * 输入：nums = [2,4,1,1,6,5]
 * 输出：3
 * 解释：
 * 在下标 0 ：由于 2 的左侧不存在不相等邻居，所以下标 0 既不是峰也不是谷。
 * 在下标 1 ：4 的最近不相等邻居是 2 和 1 。由于 4 > 2 且 4 > 1 ，下标 1 是一个峰。
 * 在下标 2 ：1 的最近不相等邻居是 4 和 6 。由于 1 < 4 且 1 < 6 ，下标 2 是一个谷。
 * 在下标 3 ：1 的最近不相等邻居是 4 和 6 。由于 1 < 4 且 1 < 6 ，下标 3 符合谷的定义，但需要注意它和下标 2 是同一个谷的一部分。
 * 在下标 4 ：6 的最近不相等邻居是 1 和 5 。由于 6 > 1 且 6 > 5 ，下标 4 是一个峰。
 * 在下标 5 ：由于 5 的右侧不存在不相等邻居，所以下标 5 既不是峰也不是谷。
 * 共有 3 个峰和谷，所以返回 3 。
 * 示例 2：
 *
 * 输入：nums = [6,6,5,5,4,1]
 * 输出：0
 * 解释：
 * 在下标 0 ：由于 6 的左侧不存在不相等邻居，所以下标 0 既不是峰也不是谷。
 * 在下标 1 ：由于 6 的左侧不存在不相等邻居，所以下标 1 既不是峰也不是谷。
 * 在下标 2 ：5 的最近不相等邻居是 6 和 4 。由于 5 < 6 且 5 > 4 ，下标 2 既不是峰也不是谷。
 * 在下标 3 ：5 的最近不相等邻居是 6 和 4 。由于 5 < 6 且 5 > 4 ，下标 3 既不是峰也不是谷。
 * 在下标 4 ：4 的最近不相等邻居是 5 和 1 。由于 4 < 5 且 4 > 1 ，下标 4 既不是峰也不是谷。
 * 在下标 5 ：由于 1 的右侧不存在不相等邻居，所以下标 5 既不是峰也不是谷。
 * 共有 0 个峰和谷，所以返回 0 。
 *
 *
 * 提示：
 *
 * 3 <= nums.length <= 100
 * 1 <= nums[i] <= 100
 */

import java.util.TreeMap;

/**
 * @Author: mango
 * @Date: 2022/3/20 10:31 上午
 */
public class LC6027 {
    public static void main(String[] args) {
        //int[] nums = {2,4,1,1,6,5};
        int[] nums = {6,6,5,5,4,1};
        //int[] nums = {8,2,5,7,7,2,10,3,6,2};
        System.out.println(new Solution().countHillValley(nums));
    }
    static class Solution {
        // 双指针
        public int countHillValley(int[] nums) {
            int result = 0;
            int last = 0;
            for(int i=1;i<nums.length-1;i++){
                int current = nums[i];
                int right = i+1;
                int left = i-1;
                // 找到左边的数
                while(left>0 && current == nums[left]){
                    left --;
                }
                // 找到右边的数
                while(right < nums.length-1 && current == nums[right]){
                    right ++;
                }
                if(nums[left] > current && current < nums[right] && current != last){
                    result++;
                    last = current;
                    System.out.println("G="+current+",left="+nums[left]+",right="+nums[right]);
                }
                if(nums[left] < current && current > nums[right] && current != last){
                    result++;
                    last = current;
                    System.out.println("F="+current+",left="+nums[left]+",right="+nums[right]);
                }
            }
            return result;
        }
    }
}
